package Controlador;
import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

import Modelo.MAccion;
import Modelo.MIngrediente;
import Modelo.MOrden;
import Modelo.MPedido;
import Modelo.MProducto;
import Modelo.MReceta;
import Vistas.VOrden;;

public class COrden implements ActionListener{
	public VOrden vOrden;
	public MOrden morden;
	public MAccion maccion;
	Vector<MPedido>detalles; 
	List<MIngrediente> listaIngrediente=new ArrayList<MIngrediente>();
	public COrden(VOrden vorden){
		detalles=new Vector<MPedido>(); 
		vOrden=vorden;
		
	}

		public void actionPerformed(ActionEvent ae) {
			if(ae.getActionCommand().equals(" Agregar ")){
				if(validarCampos()){
				morden = new MOrden(Integer.parseInt(vOrden.getTxtCodOrd().getText()),Integer.parseInt(vOrden.getTxtCedCliOrd().getText()),vOrden.getTxtFecOrd().getText(),Float.parseFloat(vOrden.getTxtMonTotOrd().getText()));
				maccion = new MAccion();
                maccion.registrarOrden(morden);
                maccion.InsertarPedidos(detalles);
                maccion.ActualizarIngredientesPorCompra(listaIngrediente);
				JOptionPane.showMessageDialog(new JFrame(), 
						"La orden se ha registrado exitosamente","Orden", 
						JOptionPane.INFORMATION_MESSAGE);
                cancelar();
                detalles.clear();
				}else
					 JOptionPane.showMessageDialog(null,"Debes llenar todos los datos","Categoria", 
								JOptionPane.INFORMATION_MESSAGE);    
			}
			
			if(ae.getActionCommand().equals("  Buscar  ")){
				if(!vOrden.getTxtCodOrd().getText().equals("")){
				MOrden orden=new MOrden();
				maccion = new MAccion();
				orden=maccion.capturarOrden(Integer.parseInt(vOrden.getTxtCodOrd().getText()));
				if(orden!=null){
				vOrden.getTxtCedCliOrd().setText(String.valueOf(orden.getCedulacli()));
				vOrden.getTxtFecOrd().setText(orden.getFecha());
				vOrden.getTxtMonTotOrd().setText(String.valueOf(orden.getMontototal()));
				}
				else
					JOptionPane.showMessageDialog(null,"La orden no existe","Orden", 
							JOptionPane.INFORMATION_MESSAGE);
				}else
					JOptionPane.showMessageDialog(null,"Introduzca el codigo de la orden","Orden", 
							JOptionPane.INFORMATION_MESSAGE);
			}
			if(ae.getActionCommand().equals("Comprar")){
				 MAccion maccion = new MAccion();
			int cant;
			boolean encontrado,agotado;
			MPedido detalle;
			float total=0,existenciaActual;
			int codOrden,codProducto,codigoCat;
			String descripcionProducto,descripcioncategoria;
			cant=Integer.parseInt(vOrden.getTxtCantidad().getText());
			codOrden=Integer.parseInt(vOrden.getTxtCodOrd().getText());
			descripcionProducto=vOrden.getJcbProducto().getSelectedItem().toString();
			float totalActual=Float.parseFloat(vOrden.getTxtMonTotOrd().getText());
			codProducto=maccion.ObtenerCodProducto(vOrden.getJcbProducto().getSelectedItem().toString());
			MProducto producto=maccion.capturarProducto(codProducto);
			total=total+(producto.getPreciouni()*cant);
			vOrden.getTxtMonTotOrd().setText(String.valueOf(total+totalActual));
			
			
			
			List<MReceta> listaRecetas=maccion.cargarIngredientesPorProductosCod(codProducto);
			MIngrediente ingrediente1,ingrediente2;
			MReceta receta;
			if(!listaIngrediente.isEmpty()){
				agotado=false;
				for(int i=0;i<listaRecetas.size();i++){
					encontrado=false;
					receta=listaRecetas.get(i);
					float cantidadTotal=cant*receta.getCantidad();
					ingrediente1=maccion.capturarIngrediente(receta.getCodigoin());
				    for(int j=0;j<listaIngrediente.size();j++){
						ingrediente2=listaIngrediente.get(j);
						if(ingrediente2.getCodigoIn()==ingrediente1.getCodigoIn()){
							if(cantidadTotal>ingrediente2.getExistencia()){
								JOptionPane.showMessageDialog(new JFrame(), 
										"No se puede realizar el pedido por falta de '"+ingrediente1.getDescripcion()+"'","Orden", 
										JOptionPane.INFORMATION_MESSAGE);
								agotado=true;
							}
							else{
								existenciaActual=ingrediente2.getExistencia()-cantidadTotal;
								ingrediente2.setExistencia(existenciaActual);
						           }
							encontrado=true;
					     }		
				}
				if(!encontrado){
					    if(cantidadTotal>ingrediente1.getExistencia()){
							JOptionPane.showMessageDialog(new JFrame(), 
									"No se puede realizar el pedido por falta de '"+ingrediente1.getDescripcion()+"'","Orden", 
									JOptionPane.INFORMATION_MESSAGE);
					    agotado=true;}
						    else{
						       ingrediente1.setExistencia(ingrediente1.getExistencia()-cantidadTotal);
						        listaIngrediente.add(ingrediente1);
						        }
				                 }	
				}
				}	
			else{
				for(int i=0;i<listaRecetas.size();i++){
					receta=listaRecetas.get(i);
					float cantidadTotal=cant*receta.getCantidad();
					ingrediente1=maccion.capturarIngrediente(receta.getCodigoin());
					if(cantidadTotal>ingrediente1.getExistencia()){
						JOptionPane.showMessageDialog(new JFrame(), 
								"No se puede realizar el pedido por falta de '"+ingrediente1.getDescripcion()+"'","Orden", 
								JOptionPane.INFORMATION_MESSAGE);
					agotado=true;}
					else{
					ingrediente1.setExistencia(ingrediente1.getExistencia()-cantidadTotal);
				    listaIngrediente.add(ingrediente1);
					}
			       }
				
			}	
			
			
			descripcioncategoria=vOrden.getJcbCategoria().getSelectedItem().toString();
			codProducto=maccion.ObtenerCodProducto(descripcionProducto);
			codigoCat=maccion.ObtenerCodCategoria(descripcioncategoria);
			detalle=new MPedido(codProducto,codOrden,cant);
			vOrden.listaModel.addElement(detalle.getCantidad()+"  "+descripcioncategoria+"  "+descripcionProducto);
			detalles.add(detalle);
			}
			
			if(ae.getActionCommand().equals("Cancelar ")){
				vOrden.getTxtCodOrd().setText("");
				vOrden.getTxtCedCliOrd().setText("");
				vOrden.getTxtFecOrd().setText("");
				vOrden.getTxtCantidad().setText("");
				vOrden.getTxtMonTotOrd().setText("0");
				vOrden.listaModel.clear();
				vOrden.getTxtCodOrd().requestFocus();
						}
				
				if(ae.getActionCommand().equals("    Salir     ")){
					int opcion = JOptionPane.showConfirmDialog(new JFrame(),"Desea volver al menu anterior?",
							     "Mensaje de Confirmacion",JOptionPane.YES_NO_OPTION,
							     JOptionPane.QUESTION_MESSAGE);
					if (opcion == JOptionPane.YES_OPTION)
						vOrden.dispose();
				                         }
		}
		public void cancelar(){
			vOrden.getTxtCodOrd().setText("");
			vOrden.getTxtCedCliOrd().setText("");
			vOrden.getTxtFecOrd().setText("");
			vOrden.getTxtCantidad().setText("");
			vOrden.getTxtMonTotOrd().setText("0");
			vOrden.listaModel.clear();
			vOrden.getTxtCodOrd().requestFocus();
			
		}
		
		private boolean validarCampos()
		{
			boolean sw=false;
			if ((!vOrden.getTxtCedCliOrd().getText().equals("")) && (!vOrden.getTxtFecOrd().getText().equals("")))
			    sw=true;
			return sw;
		}
		
		
	

}
